package com.juc.concurrency.jucExample.singleton;

import com.juc.concurrency.annoations.NotThreadSafe;

/**
 * 懒汉模式:
 * 单例实例在第一次使用时进行创建
 */
@NotThreadSafe
public class SingletonLazyExample1 {

    // 私有构造函数
    private SingletonLazyExample1() {

    }

    // 单例对象
    private static SingletonLazyExample1 instance = null;

    // 静态的工厂方法
    public static SingletonLazyExample1 getInstance() {
        //这是线程不安全的 如两个线程都到此处判断了instance为null 然后一个线程让出CPU 另一个线程继续创建实例 这时候第一个线程又回来
        // 那么就实例化两次了 但是未必就不安全 分情况 如果加载某些不能加载第二次外部资源 那么就线程不安全了
        if (instance == null) {
            instance = new SingletonLazyExample1();
        }
        return instance;
    }
}
